package com.jasperframework.boot.common.utils;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

/**
  * <p>  </p>
  *
  * @site https://miliqkdoc.motopa.cn/
  * @author daizhao
  * @date 2022/12/12 12:12
  */
public class PropertiesUtils {

	/**
	 * 获取属性文件的数据 根据key获取值
	 * @param fileName 文件名　(注意：加载的是src下的文件,如果在某个包下．请把包名加上)
	 * @param key
	 * @return
	 */
	public static String findPropertiesKey(String fileName, String key) {
		try {
			Properties prop = getProperties(fileName);
			return prop.getProperty(key);
		} catch (Exception e) {
			return "";
		}

	}

	/**
	 * 返回　Properties
	 * @param fileName 文件名　(注意：加载的是src下的文件,如果在某个包下．请把包名加上)
	 * @return
	 */
	public static Properties getProperties(String fileName) {
		Properties prop = new Properties();
		String savePath = PropertiesUtils.class.getResource(fileName == null ? "/config.properties" : fileName).getPath();
		//以下方法读取属性文件会缓存问题
		//		InputStream in = PropertiesUtils.class
		//				.getResourceAsStream("/config.properties");
		try {
			InputStream in = new BufferedInputStream(new FileInputStream(savePath));
			prop.load(in);
			in.close();
		} catch (Exception e) {
			return null;
		}
		return prop;
	}

	/**
	 * 返回　Properties
	 * @param fileName 文件名　(注意：加载的是src下的文件,如果在某个包下．请把包名加上)
	 * @param
	 * @return
	 */
	public static Properties loadProperties(String fileName) {
		Properties prop = new Properties();
		//以下方法读取属性文件会缓存问题
		//在jar文件中查找资源和在文件系统中查找资源的方式是不一样的，尽量使用Stream流的方式操作资源文件。
		//		InputStream in = PropertiesUtils.class
		//				.getResourceAsStream("/config.properties");
		//prop.load(new FileInputStream(PropertiesUtils.class.getResource(fileName).getFile()));
		try {
			InputStream in = PropertiesUtils.class.getResourceAsStream(fileName);
			prop.load(in);

		} catch (Exception e) {
			return null;
		}
		return prop;
	}

	/**
	 * 写入/修改properties信息
	 * @param key 名称
	 * @param value 值
	 */
	public static void modifyProperties(String fileName, String key, String value) {
		try {
			// 从输入流中读取属性列表（键和元素对）
			Properties prop = getProperties(fileName);
			prop.setProperty(key, value);
			String path = PropertiesUtils.class.getResource(fileName).getPath();
			FileOutputStream outputFile = new FileOutputStream(path);
			prop.store(outputFile, "modify");
			outputFile.close();
			outputFile.flush();
			System.out.println("获取添加或修改后的属性值："+key+"=" + prop.getProperty(key));
		} catch (Exception e) {
		}
	}



	public static void main(String[] args) {
		PropertiesUtils.modifyProperties("/application.properties", "upload.path", "ssss");


	}
}
